package tree;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class Queue {
    /**
     * 阻塞队列(内存队列): BlockingQueue
     * 用于解决生产者和消费者问题
     * 生产者: 生产数据或者提供数据
     * 消费者: 消费数据或者使用数据
     *
     * 在软件中线程和线程之间传输数据,就可以使用阻塞队列.
     */
    public static void main(String[] args) throws Exception {
        BlockingQueue<String> queue =
                new LinkedBlockingQueue<>(5);
        queue.put("Tom");
        queue.put("Jerry");
        queue.put("Andy");
        queue.put("Mac");
        queue.put("Lee");

        Thread t = new Thread(){
            @Override
            public void run() {
                try {
                    System.out.println("queue:"+queue);
                    queue.put("Wang");
                    System.out.println("queue:"+queue);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        t.start();

        Thread t2 = new Thread(){
            @Override
            public void run() {
                try {
                    System.out.println("开始等待...");
                    Thread.sleep(5000);
                    String str = queue.take();
                    System.out.println("取出:"+str);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        t2.start();


    }
}
